/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logica;


import fisica.CapaFisica;
import hibernate.objeto.Evolucion;
import hibernate.objeto.ExamenFisico;

/**
 *
 * @author Gonzalo
 */
public class ExamenFisicoLogica extends CapaLogica {

    /**
     * Crea y persiste el examen físico para la evolución de la 
     * enfermedad/internación del paciente.
     *
     * @param datosExamenFisico Los datos correspondientes a la ficha
     * @param evolucion La evolución de la enfermedad a la que se le
     * asocia el examen físico
     * @return true si se agregó correctamente, false en caso contrario
     */
    public static boolean agregarExamenFisico(Object[] datosExamenFisico,
            Evolucion evolucion) {

        ExamenFisico examenFisico = crearObjetoExamenFisico(
                datosExamenFisico, evolucion);

        //Persiste el objeto
        if (CapaFisica.guardarOActualizarObjeto(examenFisico)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Crea un objeto examen físico con los datos pasados por parámetro.
     *
     * @param datosExamenFisico Los datos a cargar
     * @param evolucion La evolución de la enfermedad a la que se le
     * asocia el examen físico
     * @return El objeto ExamenFisico creado
     */
    private static ExamenFisico crearObjetoExamenFisico(
            Object[] datosExamenFisico, Evolucion evolucion){
        
        ExamenFisico examenFisico = evolucion.getExamenFisico();
        if (examenFisico == null) {
            examenFisico = new ExamenFisico();
        }

        examenFisico.setPesoExamenFisico(
                (Float) datosExamenFisico[EXAMEN_FISICO_PESO]);

        examenFisico.setAlturaExamenFisico(
                (Float) datosExamenFisico[EXAMEN_FISICO_ALTURA]);

        examenFisico.setBmiExamenFisico(
                stringToFloat(datosExamenFisico[EXAMEN_FISICO_BMI].toString()));

        examenFisico.setGradoExamenFisico(
                Integer.parseInt(datosExamenFisico[EXAMEN_FISICO_GRADO].toString()));

        examenFisico.setBsaExamenFisico(
                stringToFloat(datosExamenFisico[EXAMEN_FISICO_BSA].toString()));

        examenFisico.setPerimetroCefalicoExamenFisico(
                (Float) datosExamenFisico[EXAMEN_FISICO_PERIMETRO_CEFALICO]);

        examenFisico.setPerimetroAbdominalExamenFisico(
                (Float) datosExamenFisico[EXAMEN_FISICO_PERIMETRO_ABDOMINAL]);

        examenFisico.setTensionArterialSistolicaExamenFisico(
                (Integer) datosExamenFisico[SIGNOS_VITALES_TENSION_ARTERIAL_SISTOLICA]);

        examenFisico.setTensionArterialDiastolicaExamenFisico(
                (Integer) datosExamenFisico[SIGNOS_VITALES_TENSION_ARTERIAL_DIASTOLICA]);

        examenFisico.setFrecuenciaCardiacaExamenFisico(
                (Integer) datosExamenFisico[SIGNOS_VITALES_FRECUENCIA_CARDIACA]);

        examenFisico.setFrecuenciaRespiratoriaExamenFisico(
                (Integer) datosExamenFisico[SIGNOS_VITALES_FRECUENCIA_RESPIRATORIA]);

        examenFisico.setSaturacionOxigenoExamenFisico(
                (Integer) datosExamenFisico[SIGNOS_VITALES_SATURACION_OXIGENO]);

        examenFisico.setTemperaturaExamenFisico(
                (Float) datosExamenFisico[SIGNOS_VITALES_TEMPERATURA]);

        examenFisico.setEvaExamenFisico(
                (Integer) datosExamenFisico[SIGNOS_VITALES_EVA]);

        examenFisico.setGlucemiaExamenFisico(
                (Integer) datosExamenFisico[SIGNOS_VITALES_GLUCEMIA]);

        examenFisico.setTiempoFocoNeurologicoExamenFisico(
                (Integer) datosExamenFisico[SIGNOS_VITALES_TIEMPO_FOCO_NEUROLOGICO]);

        examenFisico.setComentariosExamenFisico(
                datosExamenFisico[EXAMEN_FISICO_COMENTARIOS].toString());

        evolucion.setExamenFisico(examenFisico);

        return examenFisico;
    }
    
    /**
     * Verifica si algunos datos han sido completados.
     * 
     * @param datosExamenFisico Los datos recabados
     * @return true si se debe crear, false en caso contrario
     */
    public static boolean seDebeCrearExamenFisico(Object[] datosExamenFisico) {
        //Mediciones y algoritmos y temperatura
        Float medicionesYAlg = Float.valueOf(datosExamenFisico[
                EXAMEN_FISICO_PESO].toString()) +
                Float.valueOf(datosExamenFisico[
                EXAMEN_FISICO_ALTURA].toString()) +
                Float.valueOf(datosExamenFisico[
                EXAMEN_FISICO_PERIMETRO_CEFALICO].toString()) +
                Float.valueOf(datosExamenFisico[
                EXAMEN_FISICO_PERIMETRO_ABDOMINAL].toString()) +
                Float.valueOf(datosExamenFisico[
                SIGNOS_VITALES_TEMPERATURA].toString());
        
        //Signos vitales
        int signosVitales = Integer.valueOf(datosExamenFisico[
                SIGNOS_VITALES_TENSION_ARTERIAL_SISTOLICA].toString()) +
                Integer.valueOf(datosExamenFisico[
                SIGNOS_VITALES_TENSION_ARTERIAL_DIASTOLICA].toString()) +
                Integer.valueOf(datosExamenFisico[
                SIGNOS_VITALES_FRECUENCIA_CARDIACA].toString()) +
                Integer.valueOf(datosExamenFisico[
                SIGNOS_VITALES_FRECUENCIA_RESPIRATORIA].toString()) +
                Integer.valueOf(datosExamenFisico[
                SIGNOS_VITALES_SATURACION_OXIGENO].toString()) +
                Integer.valueOf(datosExamenFisico[
                SIGNOS_VITALES_EVA].toString()) +
                Integer.valueOf(datosExamenFisico[
                SIGNOS_VITALES_GLUCEMIA].toString()) +
                Integer.valueOf(datosExamenFisico[
                SIGNOS_VITALES_TIEMPO_FOCO_NEUROLOGICO].toString());

        return medicionesYAlg != 0 || signosVitales != 0 ||
                !datosExamenFisico[EXAMEN_FISICO_COMENTARIOS].toString().isEmpty();
    }

    /**
     * Retorna todo el objeto ExamenFisico en string.
     *
     * @param examenFisico El objeto a escribir
     */
    public static String getExamenFisicoString(ExamenFisico examenFisico) {
        String examenFisicoString =
                "idExamenFisico : " +
                examenFisico.getIdExamenFisico() + "\n" +
                "pesoExamenFisico : " +
                examenFisico.getPesoExamenFisico() + "\n" +
                "alturaExamenFisico : " +
                examenFisico.getAlturaExamenFisico() + "\n" +
                "bmiExamenFisico : " +
                examenFisico.getBmiExamenFisico() + "\n" +
                "gradoExamenFisico : " +
                examenFisico.getGradoExamenFisico() + "\n" +
                "bsaExamenFisico : " +
                examenFisico.getBsaExamenFisico() + "\n" +
                "perimetroCefalicoExamenFisico : " +
                examenFisico.getPerimetroCefalicoExamenFisico() + "\n" +
                "perimetroAbdominalExamenFisico : " +
                examenFisico.getPerimetroAbdominalExamenFisico() + "\n" +
                "tensionArterialSistolicaExamenFisico : " +
                examenFisico.getTensionArterialSistolicaExamenFisico() + "\n" +
                "tensionArterialDiastolicaExamenFisico : " +
                examenFisico.getTensionArterialDiastolicaExamenFisico() + "\n" +
                "frecuenciaCardiacaExamenFisico : " +
                examenFisico.getFrecuenciaCardiacaExamenFisico() + "\n" +
                "frecuenciaRespiratoriaExamenFisico : " +
                examenFisico.getFrecuenciaRespiratoriaExamenFisico() + "\n" +
                "saturacionOxigenoExamenFisico : " +
                examenFisico.getSaturacionOxigenoExamenFisico() + "\n" +
                "temperaturaExamenFisico : " +
                examenFisico.getTemperaturaExamenFisico() + "\n" +
                "evaExamenFisico : " +
                examenFisico.getEvaExamenFisico() + "\n" +
                "glucemiaExamenFisico : " +
                examenFisico.getGlucemiaExamenFisico() + "\n" +
                "tiempoFocoNeurologicoExamenFisico : " +
                examenFisico.getTiempoFocoNeurologicoExamenFisico() + "\n" +
                "comentariosExamenFisico : " +
                examenFisico.getComentariosExamenFisico() + "\n";

        return examenFisicoString;
    }

    /**
     * Retorna el texto HTML correspondiente a la descripcion del examen físico
     * corresopondiente de la evolución.
     *
     * @param examenFisico La evolución
     * @return El String que contiene el HTML
     */
    public static String getExamenFisicoHTML(ExamenFisico examenFisico) {
        String examnFisicoHTML = "";
        
        if (examenFisico != null) {
            examnFisicoHTML = "<font size=\"3\" face=\"arial\" color=\"blue\">EXAMEN FÍSICO</font><br><br><hr /><br> "
                    + "<font size=\"3\" face=\"arial\" color=\"black\"><i>Peso y altura:</i> </font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\">Peso(Kg): </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    examenFisico.getPesoExamenFisico() + "</font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\">Altura(cm): </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    examenFisico.getAlturaExamenFisico() + "</font><br><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\"><i>Índice de masa corporal:</i> </font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\">BMI: </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    examenFisico.getBmiExamenFisico() + "</font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\">Grado: </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    examenFisico.getGradoExamenFisico() + "</font><br><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\"><i>Área superficie corporal:</i> </font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\">BSA: </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    examenFisico.getBsaExamenFisico() + "</font><br><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\"><i>Perímetro cefálico: </i> </font><br"
                    + examenFisico.getPerimetroCefalicoExamenFisico() + "</font><br><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\"><i>Perímetro abdominal: </i> </font>"
                    + examenFisico.getPerimetroAbdominalExamenFisico() + "</font><br><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\"><i>Signos vitales:</i> </font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\">Tension arterial sistólica(mmHg): </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    examenFisico.getTensionArterialSistolicaExamenFisico() + "</font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\">Tension arterial diastólica(mmHg): </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    examenFisico.getTensionArterialDiastolicaExamenFisico() + "</font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\">Frecuencia cardíaca (por minuto): </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    examenFisico.getFrecuenciaCardiacaExamenFisico() + "</font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\">Frecuencia respiratoria (por minuto): </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    examenFisico.getFrecuenciaRespiratoriaExamenFisico() + "</font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\">Saturación de oxígeno(%): </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    examenFisico.getSaturacionOxigenoExamenFisico() + "</font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\">Temperatura(Cº): </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    examenFisico.getTemperaturaExamenFisico() + "</font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\">(EVA) Escala Visual Análoga: </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    examenFisico.getEvaExamenFisico() + "</font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\">Glusemia (mg/dL): </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    examenFisico.getGlucemiaExamenFisico() + "</font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\">Tiempo de foco neurológico (minutos): </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    examenFisico.getTiempoFocoNeurologicoExamenFisico() + "</font><br><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"black\"><i>Comentarios: </i> </font><br"
                    + examenFisico.getComentariosExamenFisico().toString();
        } else {
            examnFisicoHTML = "<font size=\"3\" face=\"arial\" color=\"blue\">EXAMEN FÍSICO</font><br><br> " +
                    "<hr /><font size=\"3\" face=\"arial\">No posee</font><br></font><hr />";
        }
        return examnFisicoHTML;
    }

}
